<%@ page language="java" import="up6.*" pageEncoding="UTF-8"%>
<%@ page contentType="text/html;charset=UTF-8"%>
<%@	page import="com.google.gson.Gson" %>
<%@ page import="up6.*" %>
<%@ page import="up6.model.*" %>
<%@ page import="up6.biz.*" %>
<%@ page import="up6.database.*" %>
<%@ page import="up6.store.*" %>
<%@	page import="org.apache.commons.lang.StringUtils" %>
<%@ page import="java.net.URLDecoder" %>
<%@ page import="java.net.URLEncoder" %>
<%@ page import="net.sf.json.JSONObject" %>
<%
out.clear();
/*
	所有单个文件均以md5模式存储。
	更新记录：
		2012-05-24 完善
		2012-06-29 增加创建文件逻辑，
		2015-07-30 取消文件夹层级结构存储规则，改为使用日期存储规则，文件夹层级结构仅保存在数据库中。
		2016-01-07 返回值改为JSON
		2016-04-09 完善逻辑。
		2017-07-13 取消生成id操作
*/
WebBase web = new WebBase(pageContext);
String id        = web.queryString("id");
String md5       = web.queryString("md5");
String uid       = web.queryString("uid");
String lenLoc    = web.queryString("lenLoc");     //数字化的文件大小。12021
String sizeLoc   = web.queryString("sizeLoc");    //格式化的文件大小。10MB
String blockSize = web.queryString("blockSize","5242880");  //块大小
String token     = web.queryString("token");
String callback  = web.queryString("callback");
String pathLoc   = web.queryString("pathLoc");
       pathLoc   = PathTool.url_decode(pathLoc);

//参数为空
if (	StringUtils.isBlank(md5)
	&& StringUtils.isBlank(uid)
	&& StringUtils.isBlank(sizeLoc))
{
	out.write(callback + "({\"value\":null})");
	return;
}

FileInf fileSvr= new FileInf();
fileSvr.id      = id;
fileSvr.fdChild = false;
fileSvr.uid     = Integer.parseInt(uid);
fileSvr.nameLoc = PathTool.getName(pathLoc);
fileSvr.nameSvr = fileSvr.nameLoc;
fileSvr.pathLoc = pathLoc;
fileSvr.lenLoc  = Long.parseLong(lenLoc);
fileSvr.sizeLoc = sizeLoc;
fileSvr.deleted = false;
fileSvr.md5     = md5;
fileSvr.calLenLocSec();//计算文件加密后的大小
fileSvr.blockSize = Integer.parseInt(blockSize);
fileSvr.encrypt   = ConfigReader.storageEncrypt();  //存储加密

WebSafe ws = new WebSafe();
boolean ret = ws.validToken(token, fileSvr);
if(!ret)
{
	String m = callback + "({\"value\":\"0\",\"ret\":false,\"msg\":\"token error\"})";
	out.write(m);
	return;
}

//所有单个文件均以uuid/file方式存储
PathBuilderUuid pb = new PathBuilderUuid();
fileSvr.pathSvr = pb.genFile(fileSvr.uid,fileSvr);
fileSvr.pathSvr = fileSvr.pathSvr.replace("\\","/");
	
FileBlockWriter fw = ConfigReader.blockWriter();
String newID = fw.make(fileSvr);
if(fw.storage == StorageType.FastDFS)
{
	fileSvr.fastdfs_id=newID;
	if(newID.isEmpty())
	{
		out.clear();
		out.write("FastDFS init error");
		response.setStatus(500);
		return;
	}
}

if(fw.storage == StorageType.Minio) {
	fileSvr.minio_id = newID;
	if(StringUtils.isEmpty(fileSvr.minio_id))
	{
		out.clear();
		out.write("minio create error");
		response.setStatus(500);;
		return;
	}
}

//触发事件
   up6_biz_event.file_create(fileSvr);


//将路径转换成相对路径
fileSvr.pathSvr = pb.absToRel(fileSvr.pathSvr);
//传输加密 
if (ConfigReader.postEncrypt())
{
	CryptoTool ct   = new CryptoTool();
    fileSvr.pathSvr = ct.encrypt(fileSvr.pathSvr.getBytes("UTF-8"));
}

Gson gson = new Gson();
String json = gson.toJson(fileSvr);

json = URLEncoder.encode(json,"UTF-8");//编码，防止中文乱码
json = json.replace("+","%20");
json = callback + "({\"value\":\"" + json + "\",\"ret\":true})";//返回jsonp格式数据。
out.write(json);%>